package form;

import java.io.IOException;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sun.mail.smtp.SMTPAddressFailedException;

import mail.MailBox;
import model.User;

import dao.UserDAO;

/**
 * Servlet implementation class dangky
 */
@WebServlet("/dangky")
public class dangky extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private String ten, ho, email, matkhau, nhaplaimatkhau, gioitinh, ngaysinh;
	private String err_ten, err_email, err_matkhau, err_nhaplaimatkhau,
			err_ngaysinh;
	private String url;
	private Pattern emailPattern, passPattern;
	private Matcher emailMatcher, passMatcher;
	private int sex;
	private Date sinhnhat;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public dangky() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
		try {
			toDo(request, response);
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		try {
			toDo(request, response);
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void toDo(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException, ClassNotFoundException,
			SQLException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");

		ten = request.getParameter("ten");
		ho = request.getParameter("ho");
		email = request.getParameter("email");
		matkhau = request.getParameter("matkhau");
		nhaplaimatkhau = request.getParameter("nhaplaimatkhau");
		gioitinh = request.getParameter("gioitinh");

		ngaysinh = request.getParameter("ngaysinh");
		try {
			sinhnhat = Date.valueOf(ngaysinh);
		} catch (IllegalArgumentException e) {
			sinhnhat = Date.valueOf("0001-01-01");
		}

		// Xử lý phần tên
		err_ten = "";
		if (ten == null) {
			err_ten = "Bạn chưa nhập tên";
		} else {
			ten = ten.trim();
		}
		if (ten == "") {
			err_ten = "Bạn chưa nhập tên";
		}

		// Xử lý phần email
		err_email = "";
		if (email == null) {
			err_email = "Bạn chưa nhập email";
		} else {
			email = email.trim();
		}
		if (email == "") {
			err_email = "Bạn chưa nhập email";
		} else {
			emailPattern = Pattern
					.compile("^[A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$");
			emailMatcher = emailPattern.matcher(email);
			if (!emailMatcher.matches()) {
				err_email = "Email không hợp lệ";

			}
		}
		try {
			if (UserDAO.contain(email) == true) {
				err_email = "Email đã được đăng kí! Vui lòng chọn email khác";
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		// Xư lý phần matkhau
		err_matkhau = "";
		if (matkhau == null) {
			err_matkhau = "Bạn chưa nhập mật khẩu";
		} else {
			matkhau = matkhau.trim();
		}
		if (matkhau == "") {
			err_matkhau = "Bạn chưa nhập mật khẩu";

		} else {
			passPattern = Pattern.compile("^[A-z0-9]{8,30}$");
			passMatcher = passPattern.matcher(matkhau);
			if (!passMatcher.matches()) {
				err_matkhau = "Mật Khẩu có ít nhất 8 kí tự";

			}

		}

		// Xu Ly phần nhập lại mật khẩu
		err_nhaplaimatkhau = "";
		if (nhaplaimatkhau == null) {
			err_nhaplaimatkhau = "Bạn chưa xác nhận mật khẩu";

		} else {
			nhaplaimatkhau = nhaplaimatkhau.trim();
		}
		if (nhaplaimatkhau == "") {
			err_nhaplaimatkhau = "Bạn chưa xác nhận mật khẩu";
		} else if (!nhaplaimatkhau.equals(matkhau)) {
			err_nhaplaimatkhau = "Mật khẩu xác nhận không trùng khớp";
		}

		// Xử lý phần giới tinh
		if (gioitinh == null) {
			sex = 0;
		} else {
			sex = Integer.parseInt(gioitinh);
		}

		// Xử lý phần đăng kí

		request.setAttribute("ten", ten);
		request.setAttribute("ho", ho);
		request.setAttribute("email", email);
		request.setAttribute("matkhau", matkhau);
		request.setAttribute("nhaplaimatkhau", nhaplaimatkhau);
		request.setAttribute("gioitinh", gioitinh);
		request.setAttribute("sinhnhat", sinhnhat);

		if (err_ten.length() > 0 || err_email.length() > 0
				|| err_matkhau.length() > 0 || err_nhaplaimatkhau.length() > 0) {
			url = "/dangky.jsp";
			request.setAttribute("err_ten", err_ten);
			request.setAttribute("err_email", err_email);
			request.setAttribute("err_matkhau", err_matkhau);
			request.setAttribute("err_nhaplaimatkhau", err_nhaplaimatkhau);
			RequestDispatcher rd = getServletContext()
					.getRequestDispatcher(url);
			rd.forward(request, response);
		} else {

			User user = new User(ten, ho, email, matkhau, sex, sinhnhat);
			try {
				UserDAO.insert(user, 1);
			} catch (Exception e) {
				e.printStackTrace();
			}

			// String smtpServer ="smtp.gmail.com", port="587", toMail=email,
			// from="quantrivienwebsite@gmail.com",psw="14682466",subject="[Tin Công Nghệ] You are new user in Tin Công Nghệ",body="Bạn có thể đăng nhập vào trang đề xem tin tức\n Email: "+
			// email+"\nMật Khẩu:  " + matkhau ;
			// try {
			// MailBox.sendmail(smtpServer, port, toMail, from, psw, subject,
			// body);
			// } catch (Exception e) {
			// System.out.println("Không gửi mail được");
			// }
			url = "/dangnhap.jsp";
			RequestDispatcher rd = getServletContext()
					.getRequestDispatcher(url);
			rd.forward(request, response);
		}

	}

}
